package com.hzit.pay.web.controller;

import com.hzit.pay.web.service.IPayService;
import com.hzit.pay.web.service.IpaySerialService;
import com.hzit.payweb.api.req.PayReq;
import com.hzit.payweb.api.req.TradeQueryReq;
import com.hzit.payweb.api.resp.RespVo;
import com.hzit.payweb.api.resp.data.PayRespData;
import com.hzit.payweb.api.resp.data.TradingData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;

/**
 * 支付请求入口
 */
@RestController
@RequestMapping("/pay")
public class PayController {

    private static final Logger logger = LoggerFactory.getLogger(PayController.class);

    @Autowired
    private IPayService payService;

    @Autowired
    private IpaySerialService paySerialService;

    /**
     * 根据商户id 查询商户支付方式
     */
    @RequestMapping("/queryPayWay")
    public RespVo queryMchPayWay(){
        //1.验签

        //2.根据商户id往数据查询支付方式，

        //3.redis中缓存一下

        //4.封装对象返回

        return new RespVo();
    }


    /**
     * 异步支付统一入口: 所有业务系统调用此接口
     * @param payReq
     * @return
     */
    @RequestMapping("/create")
    public RespVo<PayRespData> pay(@Valid @RequestBody PayReq payReq){
        logger.info("接收到业务系统的支付请求，请求参数：{}....",payReq);

        try {

           RespVo<PayRespData> payRespDataRespVo = payService.createPay(payReq);
           logger.info("处理完业务系统的支付请求，返回参数：{}....",payRespDataRespVo);
           return payRespDataRespVo;

       }catch (Exception e){
           logger.error("Exception",e);
           return RespVo.returnFail(-1,e.getMessage());
       }

    }

    /**
     * 提供给，商户用的，长时间没有收到异步回调，调用此接口，查询订单的结果
     * @return
     */
    @RequestMapping("/mchQueryTradeStatus")
    public String queryTradeStatus(@RequestBody TradeQueryReq tradeQueryReq){
        //先查库，在查银行接口

        payService.queryTrade(tradeQueryReq);
        return null;
    }


    /**
     * 查询支付中的数据
     * @param mchId
     * @return
     */
    @RequestMapping("/queryTraing")
    public RespVo<List<TradingData>> queryAllTradeing(@RequestParam("mchId")String mchId ){
        RespVo<List<TradingData>> respVo = RespVo.returnSuccess("查询成功");
        respVo.setData(paySerialService.queryTradingListByMchId(mchId));;
        return respVo;
    }



    @RequestMapping("/tradeColse")
    public String tradeColse(@RequestBody TradeQueryReq tradeQueryReq){
        //1.验证参数
        //2.签名判断
        //3.查询支付流水
        //4.支付成功和支付失败，返回该比订单不支持关闭。
        //5.状态为1未支付.2支付中 调用前置服务的交易关闭接口
        //6.解析返回结果，关闭成功，就更新流水状态，支付失败，用户关闭交易
        //7.封装对象返回支付系统。


        //调用支付宝或者银行的交易关闭接口

        return null;
    }


}
